Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

perf: Check file using SWC before applying React Compiler #75605

Draft
wants to merge 13 commits into
base: canary
Choose a base branch
from

Conversation

kdy1
Copy link
Member

@kdy1 kdy1 commented Feb 3, 2025

What?

Check if the file is a file that is interesting to the React Compiler before passing it to the React Compiler

Why?

It would skip majority of files

@kdy1 kdy1 self-assigned this Feb 3, 2025
@ijjk ijjk added created-by: Turbopack team PRs by the Turbopack team. type: next labels Feb 3, 2025
@kdy1 kdy1 force-pushed the kdy1/react-compiler branch from 41b27af to bc21166 Compare February 4, 2025 13:21
@ijjk
Copy link
Member

ijjk commented Feb 4, 2025

Failing test suites

Commit: c4441d4

pnpm test test/unit/next-babel-loader-prod.test.ts

  • next-babel-loader > replace constants > should replace typeof window expression nested
  • next-babel-loader > replace constants > should replace typeof window expression top level (client)
  • next-babel-loader > replace constants > should replace typeof window expression top level (server)
  • next-babel-loader > replace constants > should replace typeof window in === expression nested
  • next-babel-loader > replace constants > should replace typeof window expression top level
  • next-babel-loader > replace constants > should replace typeof window in === expression top level
  • next-babel-loader > replace constants > should replace typeof window in !== expression top level
  • next-babel-loader > replace constants > should replace typeof window expression !== object top level
  • next-babel-loader > replace constants > should replace typeof window expression top level serverside
  • next-babel-loader > replace constants > should replace typeof window expression !== object top level serverside
  • next-babel-loader > replace constants > should replace process.browser (1)
  • next-babel-loader > replace constants > should replace process.browser (2)
  • next-babel-loader > replace constants > should replace process.browser (3)
  • next-babel-loader > replace constants > should replace process.browser (4)
  • next-babel-loader > replace constants > should replace process.browser (5)
  • next-babel-loader > replace constants > should replace NODE_ENV on client (prod)
  • next-babel-loader > replace constants > should replace NODE_ENV on server
  • next-babel-loader > replace constants > should replace NODE_ENV in === statement (prod)
  • next-babel-loader > replace constants > should replace NODE_ENV in !== statement (prod)
  • next-babel-loader > replace constants > should handle no pagesDir
  • next-babel-loader > replace constants > should not drop unused exports by default
  • next-babel-loader > replace constants > should not drop unused exports by default in a page
  • next-babel-loader > replace constants > should drop unused exports in a modern-apis page
  • next-babel-loader > replace constants > should keep used exports in a modern-apis page (server)
  • next-babel-loader > replace constants > should keep used exports in a modern-apis page (client)
  • next-babel-loader > replace constants > should keep used exports and react in a modern-apis page with JSX (client)
Expand output

● next-babel-loader › replace constants › should replace typeof window expression nested

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should replace typeof window expression top level (client)

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should replace typeof window expression top level (server)

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should replace typeof window in === expression nested

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should replace typeof window expression top level

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should replace typeof window in === expression top level

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should replace typeof window in !== expression top level

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should replace typeof window expression !== object top level

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should replace typeof window expression top level serverside

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should replace typeof window expression !== object top level serverside

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should replace process.browser (1)

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should replace process.browser (2)

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should replace process.browser (3)

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should replace process.browser (4)

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should replace process.browser (5)

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should replace NODE_ENV on client (prod)

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should replace NODE_ENV on server

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should replace NODE_ENV in === statement (prod)

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should replace NODE_ENV in !== statement (prod)

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should handle no pagesDir

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should not drop unused exports by default

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should not drop unused exports by default in a page

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should drop unused exports in a modern-apis page

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should keep used exports in a modern-apis page (server)

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should keep used exports in a modern-apis page (client)

failed to load file

  Caused by:
      No such file or directory (os error 2)

● next-babel-loader › replace constants › should keep used exports and react in a modern-apis page with JSX (client)

failed to load file

  Caused by:
      No such file or directory (os error 2)

Read more about building and testing Next.js in contributing.md.

pnpm test test/unit/next-babel-loader-dev.test.ts

  • next-babel-loader > replace constants > should replace NODE_ENV on client (dev)
  • next-babel-loader > replace constants > should replace NODE_ENV in statement (dev)
  • next-babel-loader > replace constants > should support 9.4 regression
Expand output

● next-babel-loader › replace constants › should replace NODE_ENV on client (dev)

failed to load file

  Caused by:
      The system cannot find the file specified. (os error 2)

● next-babel-loader › replace constants › should replace NODE_ENV in statement (dev)

failed to load file

  Caused by:
      The system cannot find the file specified. (os error 2)

● next-babel-loader › replace constants › should support 9.4 regression

failed to load file

  Caused by:
      The system cannot find the path specified. (os error 3)

Read more about building and testing Next.js in contributing.md.

pnpm test test/integration/amp-export-validation/test/index.test.js (turbopack)

  • AMP Validation on Export > production mode > should have shown errors during build
Expand output

● AMP Validation on Export › production mode › should have shown errors during build

expect(received).toMatch(expected)

Expected pattern: /error.*The mandatory attribute 'height' is missing in tag 'amp-video'\./
Received string:  "   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amp-export-validation/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amp-export-validation/next.config.js
   ▲ Next.js 15.2.0-canary.40 (Turbopack)·
   Checking validity of types ...
   Creating an optimized production build ...
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amp-export-validation/next.config.js
   Loading config from /root/actions-runner/_work/next.js/next.js/test/integration/amp-export-validation/next.config.js
   Building (0/7) ...
   Building (1/7)··
   Building (3/7)··
   Building (5/7)··
 ✓ Building (7/7)
 ✓ Compiled successfully in 2.3s
   Collecting page data ...
   Generating static pages (0/8) ...
   Generating static pages (2/8)··
 ⚠ Linting is disabled.
Error occurred prerendering page \"/second\". Read more: https://nextjs.org/docs/messages/prerender-error
AssertionError: Assertion failed: WebAssembly is uninitialized

  at new module$contents$goog$asserts_AssertionError (../evalmachine.<anonymous>:106:1695)
  at module$contents$goog$asserts_doAssertFailure (../evalmachine.<anonymous>:107:354)
  at goog.asserts.assertExists (../evalmachine.<anonymous>:109:142)
  at Object.module$contents$amp$validator_validateString [as validateString] (../evalmachine.<anonymous>:2663:108)
  at Validator.validateString (../packages/next/dist/compiled/amphtml-validator/index.js:1:20650)
  at validateAmp (../packages/next/dist/export/routes/pages.js:87:34)
  at async exportPagesPage (../packages/next/dist/export/routes/pages.js:104:13)
  at async Span.traceAsyncFn (../packages/next/dist/trace/trace.js:156:20)
  at async exportPage (../packages/next/dist/export/worker.js:352:18)
  Export encountered an error on /second, exiting the build.
   ⨯ Static worker exited with code: 1 and signal: null
  "
  at Object.toMatch (integration/amp-export-validation/test/index.test.js:28:29)

Read more about building and testing Next.js in contributing.md.

pnpm test-start-turbo test/e2e/react-compiler/react-compiler.test.ts (turbopack)

  • react-compiler default > should render
Expand output

● react-compiler default › should render

thrown: "Exceeded timeout of 120000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."

  53 |   })
  54 |
> 55 |   it('should render', async () => {
     |   ^
  56 |     const browser = await next.browser('/')
  57 |
  58 |     await retry(async () => {

  at it (e2e/react-compiler/react-compiler.test.ts:55:3)
      at Array.forEach (<anonymous>)
  at Object.Boolean (e2e/react-compiler/react-compiler.test.ts:20:69)

Read more about building and testing Next.js in contributing.md.

@ijjk
Copy link
Member

ijjk commented Feb 4, 2025

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary vercel/next.js kdy1/react-compiler Change
buildDuration 19.9s 17.5s N/A
buildDurationCached 16.6s 14s N/A
nodeModulesSize 392 MB 392 MB ⚠️ +12.8 kB
nextStartRea..uration (ms) 456ms 456ms
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js kdy1/react-compiler Change
5306-HASH.js gzip 54 kB 54 kB N/A
8276.HASH.js gzip 169 B 168 B N/A
8377-HASH.js gzip 5.46 kB 5.46 kB N/A
bccd1874-HASH.js gzip 52.9 kB 52.9 kB N/A
framework-HASH.js gzip 57.5 kB 57.5 kB N/A
main-app-HASH.js gzip 241 B 242 B N/A
main-HASH.js gzip 34.5 kB 34.5 kB N/A
webpack-HASH.js gzip 1.71 kB 1.71 kB N/A
Overall change 0 B 0 B
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js kdy1/react-compiler Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Overall change 39.4 kB 39.4 kB
Client Pages
vercel/next.js canary vercel/next.js kdy1/react-compiler Change
_app-HASH.js gzip 193 B 193 B
_error-HASH.js gzip 193 B 193 B
amp-HASH.js gzip 512 B 510 B N/A
css-HASH.js gzip 343 B 342 B N/A
dynamic-HASH.js gzip 1.84 kB 1.84 kB
edge-ssr-HASH.js gzip 265 B 265 B
head-HASH.js gzip 363 B 362 B N/A
hooks-HASH.js gzip 393 B 392 B N/A
image-HASH.js gzip 4.59 kB 4.58 kB N/A
index-HASH.js gzip 268 B 268 B
link-HASH.js gzip 2.35 kB 2.35 kB N/A
routerDirect..HASH.js gzip 328 B 328 B
script-HASH.js gzip 397 B 397 B
withRouter-HASH.js gzip 323 B 326 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 3.59 kB 3.59 kB
Client Build Manifests
vercel/next.js canary vercel/next.js kdy1/react-compiler Change
_buildManifest.js gzip 748 B 747 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js kdy1/react-compiler Change
index.html gzip 525 B 524 B N/A
link.html gzip 539 B 538 B N/A
withRouter.html gzip 520 B 520 B
Overall change 520 B 520 B
Edge SSR bundle Size
vercel/next.js canary vercel/next.js kdy1/react-compiler Change
edge-ssr.js gzip 130 kB 130 kB N/A
page.js gzip 210 kB 210 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary vercel/next.js kdy1/react-compiler Change
middleware-b..fest.js gzip 676 B 672 B N/A
middleware-r..fest.js gzip 155 B 156 B N/A
middleware.js gzip 31.3 kB 31.3 kB N/A
edge-runtime..pack.js gzip 844 B 844 B
Overall change 844 B 844 B
Next Runtimes
vercel/next.js canary vercel/next.js kdy1/react-compiler Change
app-page-exp...dev.js gzip 393 kB 393 kB
app-page-exp..prod.js gzip 132 kB 132 kB
app-page-tur..prod.js gzip 145 kB 145 kB
app-page-tur..prod.js gzip 141 kB 141 kB
app-page.run...dev.js gzip 380 kB 380 kB
app-page.run..prod.js gzip 128 kB 128 kB
app-route-ex...dev.js gzip 39.3 kB 39.3 kB
app-route-ex..prod.js gzip 25.6 kB 25.6 kB
app-route-tu..prod.js gzip 25.6 kB 25.6 kB
app-route-tu..prod.js gzip 25.4 kB 25.4 kB
app-route.ru...dev.js gzip 40.8 kB 40.8 kB
app-route.ru..prod.js gzip 25.4 kB 25.4 kB
dist_client_...dev.js gzip 356 B 356 B
dist_client_...dev.js gzip 349 B 349 B
pages-api-tu..prod.js gzip 9.69 kB 9.69 kB
pages-api.ru...dev.js gzip 11.8 kB 11.8 kB
pages-api.ru..prod.js gzip 9.68 kB 9.68 kB
pages-turbo...prod.js gzip 21.9 kB 21.9 kB
pages.runtim...dev.js gzip 31.5 kB 31.5 kB
pages.runtim..prod.js gzip 21.9 kB 21.9 kB
server.runti..prod.js gzip 60.5 kB 60.5 kB
Overall change 1.67 MB 1.67 MB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js kdy1/react-compiler Change
0.pack gzip 2.1 MB 2.1 MB ⚠️ +895 B
index.pack gzip 75.5 kB 75.7 kB ⚠️ +242 B
Overall change 2.18 MB 2.18 MB ⚠️ +1.14 kB
Diff details
Diff for main-HASH.js

Diff too large to display

Commit: c4441d4

@kdy1 kdy1 changed the base branch from canary to graphite-base/75605 February 5, 2025 08:48
@kdy1 kdy1 force-pushed the kdy1/react-compiler branch from 8eb1bfc to cecba2c Compare February 5, 2025 08:48
@kdy1 kdy1 changed the base branch from graphite-base/75605 to kdy1/react-compiler-iff February 5, 2025 08:48
Copy link
Member Author

kdy1 commented Feb 5, 2025

Warning

This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

This stack of pull requests is managed by Graphite. Learn more about stacking.

@kdy1 kdy1 force-pushed the kdy1/react-compiler branch from cecba2c to c4441d4 Compare February 5, 2025 09:17
@kdy1 kdy1 force-pushed the kdy1/react-compiler-iff branch from 423a9cb to 7e21164 Compare February 12, 2025 07:09
Base automatically changed from kdy1/react-compiler-iff to canary February 17, 2025 12:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants